/*  errors.c  */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

#include "kernel.h"
#include "newfs.h"
#include "swis.h"

/***************************************************************************/

_kernel_oserror err_blk;
_kernel_oserror *_syserr;

char logfile[256] = LOGFILE;

/***************************************************************************/

_kernel_oserror *global_error(int number)

  /* Returns a RISC OS error block pointer for the given error number.

     Only called from glue.s at present
  */

{
  char *mess = "???";

  switch (number)
  {
    case NOT_SUPPORTED:  mess = "not supported";       break;
    case NO_STACK:       mess = "no stack";            break;
    case BAD_PAR_ARGS:   mess = "bad ARGS parameter";  break;
    case BAD_PAR_FILE:   mess = "bad FILE parameter";  break;
    case BAD_PAR_FUNC:   mess = "bad FUNC parameter";  break;
  }

  sprintf(_syserr->errmess, "NewFS error number &%02x - '%s'", number, mess);
  _syserr->errnum = number;

  debug("%s\n", _syserr->errmess);

  return _syserr;
}

/***************************************************************************/

_kernel_oserror *global_errorV(char *format, ...)

  /* Returns a RISC OS error block pointer for the given error string.

     Fills in error number as &55 ...
  */

{
  va_list ap;

  va_start(ap, format);
  vsprintf(_syserr->errmess, format, ap);
  va_end(ap);

  _syserr->errnum = 0x55;

  debug("%s\n", _syserr->errmess);

  return _syserr;
}

/***************************************************************************/

void debug(char *format, ...)

  /* called to output information to a log file */

{
  FILE *f;
  va_list ap;

#if DEBUG
  f = fopen(logfile, "a");

  if (f != NULL)
  {
    va_start(ap, format);
    vfprintf(f, format, ap);
    va_end(ap);

    fclose(f);
  }
#endif

  return;
}

/***************************************************************************/
